/*
 * @(#)ModuleCall.java        1.0 2000/05/09
 *
 * This file is part of Xfuzzy 3.0, a design environment for fuzzy logic
 * based systems.
 *
 * (c) 2000 IMSE-CNM. The authors may be contacted by the email address:
 *                    xfuzzy-team@imse.cnm.es
 *
 * Xfuzzy is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by
 * the Free Software Foundation.
 *
 * Xfuzzy is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * for more details.
 */

package xfuzzy.lang;

/**
 * Interfaz que encapsula las llamadas a bases de reglas y m�dulos no difusos
 * 
 * @author Francisco Jos� Moreno Velo
 *
 */
public interface ModuleCall {
	
	//----------------------------------------------------------------------------//
	//                            M�TODOS P�BLICOS                                //
	//----------------------------------------------------------------------------//
	
	/**
	 * Genera la descripci�n XFL3 de la llamada
	 */
	public String toXfl();
	
	/**
	 * Obtiene el nombre del objeto llamado
	 */
	public String getName();
	
	/**
	 * Obtiene el n�mero de variables de entrada
	 */
	public int getNumberOfInputs();
	
	/**
	 * Obtiene el n�mero de variables de salida
	 */
	public int getNumberOfOutputs();
	
	/**
	 * Obtiene las variables de entrada de la llamada
	 */
	public Variable[] getInputVariables();
	
	/**
	 * Obtiene las variables de salida de la llamada
	 */
	public Variable[] getOutputVariables();
	
	/**
	 * Asigna una variable de entrada
	 */
	public void setInputVariable(int index, Variable var);
	
	/**
	 * Asigna una variable de salida
	 */
	public void setOutputVariable(int index, Variable var);
	
	/**
	 * Obtiene los valores difusos de las salidas
	 */
	public MemFunc[] getFuzzyValues();
	
	/**
	 * Ejecuta la llamada
	 */
	public void compute();
	
	/**
	 * Elimina los enlaces para poder eliminar el objeto
	 */
	public void dispose();
	
	/**
	 * Calcula la derivada
	 */
	public void derivative(double[] deriv) throws XflException;
	
	/**
	 * Calcula la derivada
	 */
	public void derivative() throws XflException;
	
}   

